
// Panzervariablen
var geschwindigkeitsVarianz : Vector2 = Vector2(5, 10); // zweidimensionaler Vektor fuer Zufallsgrenzen
var health : float = 50; 				// Health des spezifischen Objekts
var schadensRauch : ParticleEmitter;	// Zur Visualisierung des Schadens

// Maximale Gesundheit zum Initialisieren bei der Generierung
var maxhealth : float = 50;				// Maximalgesundheit
var cashBonus : int = 5;				// Abschusspraemie

var geschwindigkeit : float = 5;		// Geschwindigkeit
var explosionEffect : GameObject;		// ExplosionsEffekt

// Waypoints-System
var levelMaster : LevelMaster;			// Referenz auf LevelMaster
var routenAmSpawnpunkt : Transform[];	// Routenauswahl
var zufallsRoute : int;					// gewaehlte Route
var meineRoute : Transform[];			// Einzelne Wegpunkte der gewaehlten Route
private var currentWaypoint : int;		// aktuell angestrebter Wegpunkt

// Referenz auf das Null-Parent-Objekt der Spawnpunkte Ground
var meinSpawnPunkt : Transform;			// Spawnpunkt zum Instanziieren

var daempfung : int = 10;

function Start() {
	// Verknuepfung mit LevelMaster
	levelMaster = GameObject.FindWithTag("LevelMaster").GetComponent(LevelMaster); 			// LevelMaster-Connect
	health = maxhealth + levelMaster.waveLevel * 5; 										// Volle Gesundheit
	geschwindigkeit = Random.Range(geschwindigkeitsVarianz.x, geschwindigkeitsVarianz.y); 	// Zufallsgeschwindigkeit
	// Multiplier
	geschwindigkeit *= levelMaster.difficultyMultiplier;
	health *= levelMaster.difficultyMultiplier;
	maxhealth *= levelMaster.difficultyMultiplier;
}

function Update() {
	// Solange es noch weitere Wegpunkte gibt
	if (currentWaypoint < meineRoute.Length) {
		var target : Vector3 = meineRoute[currentWaypoint].position; 	// Ziel auf Position des aktuellen Wegpunktes setzen
		var moveDirection : Vector3 = target - this.transform.position; // Bewegungsrichtung errechnen
		var velocity = this.rigidbody.velocity;

		if (moveDirection.magnitude < 1) {
			currentWaypoint++;
		} else {
			velocity = moveDirection.normalized * geschwindigkeit;

			var rotation = Quaternion.LookRotation(meineRoute[currentWaypoint].position - this.transform.position);
			this.transform.rotation = Quaternion.Slerp(this.transform.rotation, rotation, Time.deltaTime * daempfung); //
		}
	}

	this.rigidbody.velocity = velocity;
}

// Wird aufgerufen wenn der Gegner am Spawnpunkt instanziiert wird!
function OnTriggerEnter(other : Collider) {

	if (other.gameObject.tag == "SpawnPoint") {

		meinSpawnPunkt = other.gameObject.transform; // Parent der einzelnen Routen erfassen

		// Array der Groesse gleich Anzahl Spawnpunkte Air
		routenAmSpawnpunkt = new Transform[meinSpawnPunkt.childCount];
		var i : int = 0; // Zaehler for-each-Schleife
		for (var oneRoute : Transform in meinSpawnPunkt) {
			routenAmSpawnpunkt[i] = oneRoute;
			i++;
		}

		zufallsRoute = Random.Range(0, i);

		// Array der Groesse gleich Anzahl der Wegpunkte der gewaehlten Route
		meineRoute = new Transform[routenAmSpawnpunkt[zufallsRoute].childCount];
		var j : int = 0; // Zaehler for-each-Schleife
		for (var waypoint : Transform in routenAmSpawnpunkt[zufallsRoute]) {
			meineRoute[j] = waypoint;
			j++;
		}

		this.collider.isTrigger = false; // Trigger ausschalten! Initialisierung abgeschlossen
	}
}

// Schadensmodell: nimmt Schadenspunkte entgegen
function schaden(schaden : float) {
	health -= schaden; // Schaden abziehen
	if (health <= 0) {
		Explode();								// Explosionsfunktion (dort das Objekt zerstoeren)
		return;
	} else if (health / maxhealth <= 0.5) {		// Bei weniger als 50% der Maximalgesundheit
		schadensRauch.emit = true;				// Schadensvisualisierung aktivieren
	}
}
function Explode() {
	// LevelMaster
	//if(levelMaster.enemyCount > 0){
	//levelMaster.enemyCount--;			// Levelmastervariablen aktualisieren
	//}
	levelMaster.cashCount += cashBonus;																// Variablen fur GUI aktualisieren
	levelMaster.scoreCount += (maxhealth + geschwindigkeit * levelMaster.difficultyMultiplier);		// Variablen fur GUI aktualisieren
	levelMaster.UpdateGUI();																		// Gui aktualisieren

	Instantiate(explosionEffect, transform.position, Quaternion.identity);							// Explosion erzeugen
	Destroy(gameObject);																			// Objekt zerstoeren
}